package com.gj.server;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
import org.springframework.boot.convert.Delimiter;

import java.util.ArrayList;
import java.util.List;

/**
 * @author: xiaobin
 * @create: 2020-12-14 23:58
 */
public class DlhFrameDecoder extends ByteToMessageDecoder {
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
//        //创建字节数组,buffer.readableBytes可读字节长度
//        byte[] b = new byte[buffer.readableBytes()];
//        //复制内容到字节数组b
//        buffer.readBytes(b);
//        //字节数组转字符串
//        String str = new String(b);
//
//        System.out.println(str);
//
//        out.add(bytesToHexString(b));

//
//        System.out.println("开始解码：");
//        int length = in.readableBytes();
//        if (length < Delimiter.MINIMUM_LENGTH)
//            return;
//        in.markReaderIndex(); // 我们标记一下当前的readIndex的位置
//
//        // 解码后消息对象
//        GpsMessage gpsMessage = new GpsMessage();
//        byte packetLen = in.readByte();
//        int nPacketLen = packetLen & 0xff;
//        gpsMessage.setPacketLen(nPacketLen);
//        /**
//         * 协议
//         */
//        byte agreement = in.readByte();
//        gpsMessage.setAgreement(agreement);
//        ByteBuf frame = null;
//        if (agreement == Delimiter.LOGIN_PACKET) { // 登录包
//            LoginMsg loginMsg = new LoginMsg();
//            frame = CrcUtils.decodeCodeIDFrame(ctx, in);
//            String sCode = CrcUtils.bytesToHexString(frame);
//            System.out.println("编号：" + sCode);
//            loginMsg.setCardId(sCode);
//            gpsMessage.setContent(loginMsg);
//        } else if (agreement == Delimiter.STATUS_PACKET) {// 心跳包
//            System.out.println(" 心跳包：");
//            frame = CrcUtils.decodeCodeIDFrame(ctx, in);
//            String sContent = CrcUtils.bytesToHexString(frame);
//            System.out.println("心跳包内容：" + sContent);
//            gpsMessage.setContent(sContent);
//        }
//        out.add(gpsMessage);
//        System.out.println("解码结束!");


    }

    public String bytesToHexString(byte[] bArray) {
        StringBuffer sb = new StringBuffer(bArray.length);
        String sTemp;
        for (int i = 0; i < bArray.length; i++) {
            sTemp = Integer.toHexString(0xFF & bArray[i]);
            if (sTemp.length() < 2)
                sb.append(0);
            sb.append(sTemp.toUpperCase());
        }
        return sb.toString();
    }

    public static String toHexString1(byte[] b) {
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < b.length; ++i) {
            buffer.append(toHexString1(b[i]));
        }
        return buffer.toString();
    }

    public static String toHexString1(byte b) {
        String s = Integer.toHexString(b & 0xFF);
        if (s.length() == 1) {
            return "0" + s;
        } else {
            return s;
        }
    }





    private Object decode(ChannelHandlerContext ctx, ByteBuf in) {

//        byte aByte = in.getByte(0);
//        System.out.println(aByte);
//
//        byte aa = (byte) 0xaa;
//
//        System.out.println(aa == aByte);

        List<Byte> list = new ArrayList<>();
        for (int i = 0; i < in.writerIndex(); i ++) {

            System.out.println(in.getByte(i));
//            System.out.println(intTohex(in.getByte(i)));
        }

        System.out.println("--------");
//
//        for (byte i : list) {
//            System.out.println(i);
////            System.out.println(Integer.);
//        }

//
//        byte aa = (byte) 0xAA;
//        int index = indexOf(in, aa);
//        if(index != -1){
//            if (in.readableBytes() < index) {
//                return null;
//            }
//            return in.readSlice(index).retain();
//        }
        return null;
    }

}
